module SiteChecker
  module IO
    class ContentFromFileSystem

      def initialize(visit_references, root)
        @visit_references = visit_references
        @root = root
      end

      def get(link)
        begin
          location = create_absolute_reference(link.url)
          if link.local_page?
            content = File.open(add_index_html(location)).read
          elsif link.local_image?
            File.open(location)
          elsif @visit_references
            open(link.url)
          end
        rescue Errno::ENOENT => e
          raise "(404 Not Found)"
        rescue => e
          raise "(#{e.message.strip})"
        end
        content
      end

      private
      def add_index_html(path)
        path = $1 if path.match(/(.+)#/)
        path.end_with?(".html") ? path : File.join(path, "index.html")
      end

      def create_absolute_reference(link)
        if !link.eql?(@root)
          File.join(@root, link)
        else
          @root
        end
      end
    end
  end
end